
/*ms计数器，供其他任务使用。
QQ为什么不用SysTick呢？获取有些麻烦，执行时间长。
*/

#include "stm32l4xx.h"
#include "stm32l4xx_ll_bus.h"
#include "stm32l4xx_ll_tim.h"


/*使用一个32位计数器(TIM2)，粒度=1ms。
TIM2时钟来自APB1（APB1来自HCLK，未分频），现在为64MHz。
L431xx系列只有TIM2，没有TIM5。
已验证:ms正常。
*/
void bsp_tim_tmo_init(void)
{
	LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM2);
	
	LL_TIM_SetClockSource(TIM2, LL_TIM_CLOCKSOURCE_INTERNAL);
	LL_TIM_SetPrescaler(TIM2, SystemCoreClock/1000- 1);			//分频后，时钟为1K。分频数最大为65536，所以，不支持80MHz，最高支持65.536MHz。
	LL_TIM_SetCounterMode(TIM2, LL_TIM_COUNTERMODE_UP);
	
	LL_TIM_GenerateEvent_UPDATE(TIM2);							//触发更新PSC。
	
	LL_TIM_EnableCounter(TIM2);
}



/*计算时间戳的差值。
考虑翻转
*/
uint32_t ts_del_o_n(uint32_t ts_old, uint32_t ts_new)
{
	if(ts_new>= ts_old)	//之前为(ts_new> ts_old)，结果当ts_new==ts_lod时，执行了return (0xFFFFFFFF- ts_old)+ ts_new;
		return (ts_new- ts_old);
	else{
		return (0xFFFFFFFF- ts_old)+ ts_new;
	}
}

/*获取32-bit的ts值（分辨率为1ms）。
*/
uint32_t ts_get(void)
{
	return TIM2->CNT;
}

/************************ END OF FILE ************************/
